home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / cyberxxxsrc / cyberqt / txt / cyberqtutils.mod < prev    next >
Text File  |  1999-02-08  |  8KB  |  275 lines

  1. MODULE  CyberQTUtils;
  2.  
  3. (* $IFNOT DEBUG *)
  4.   (* $StackChk- $OvflChk- $RangeChk- $CaseChk- $ReturnChk- $NilChk- $TypeChk- $OddChk- $ClearVars- *)
  5. (* $END *)
  6.  
  7. (* /// ------------------------------- "IMPORT" -------------------------------- *)
  8. IMPORT  aio:=AsyncIO,
  9.         d:=Dos,
  10.         e:=Exec,
  11.         es:=ExecSupport,
  12.         g:=CyberQTGlobals,
  13.         i:=Intuition,
  14.         lv:=LibraryVer,
  15.         mu:=MathUtils,
  16.         ol:=OberonLib,
  17.         u:=Utility,
  18.         y:=SYSTEM;
  19. (* \\\ ------------------------------------------------------------------------- *)
  20.  
  21. (* /// -------------------------------- "TYPE" --------------------------------- *)
  22. TYPE    Array4=ARRAY 4 OF SHORTINT;
  23.         Array2=ARRAY 2 OF SHORTINT;
  24. (* \\\ ------------------------------------------------------------------------- *)
  25.  
  26. (* /// ------------------------ "PROCEDURE PrintFCC()" ------------------------- *)
  27. PROCEDURE PrintFCC * (fcc: LONGINT);
  28.  
  29. TYPE    arr=ARRAY 4 OF CHAR;
  30.  
  31. VAR     data: arr;
  32.         null: LONGINT;
  33.  
  34. BEGIN
  35.   null:=0;
  36.   data:=y.VAL(arr,fcc);
  37.   d.PrintF("%s ($%08lx)",y.ADR(data),fcc);
  38. END PrintFCC;
  39. (* \\\ ------------------------------------------------------------------------- *)
  40.  
  41. (* /// --------------------- "PROCEDURE PrintChunkHead()" ---------------------- *)
  42. PROCEDURE PrintChunkHead * (id,size: LONGINT);
  43. BEGIN
  44.   d.PrintF("id: ");
  45.   PrintFCC(id);
  46.   d.PrintF(" size: $%08lx (%10ud)",size,size);
  47. END PrintChunkHead;
  48. (* \\\ ------------------------------------------------------------------------- *)
  49.  
  50. (* /// ------------------------ "PROCEDURE PrintName()" ------------------------ *)
  51. PROCEDURE PrintName * (name: ARRAY OF CHAR); (* $CopyArrays- *)
  52.  
  53. VAR     len: INTEGER;
  54.  
  55. BEGIN
  56.   len:=ORD(name[0]);
  57.   name[len+1]:=00X;
  58.   d.PrintF("%s",y.ADR(name[1]));
  59. END PrintName;
  60. (* \\\ ------------------------------------------------------------------------- *)
  61.  
  62. (* /// ------------------------ "PROCEDURE PrintReal()" ------------------------ *)
  63. PROCEDURE PrintReal * (r: REAL);
  64.  
  65. VAR     x, y: LONGINT;
  66.  
  67. BEGIN
  68.   mu.real2int(r,x,y,6);
  69.   d.PrintF("%3ld.%06ld",x,y);
  70. END PrintReal;
  71. (* \\\ ------------------------------------------------------------------------- *)
  72.  
  73. (* /// --------------------------- "PROCEDURE oom()" --------------------------- *)
  74. PROCEDURE oom();
  75.  
  76. VAR     errStr: e.STRING;
  77.         prg: e.STRING;
  78.  
  79. BEGIN
  80.   y.SETREG(0,d.GetProgramName(prg,SIZE(prg)));
  81.   y.SETREG(0,d.Fault(d.noFreeStore,prg,errStr,SIZE(errStr)));
  82.   d.PrintF("%s\n",y.ADR(errStr));
  83.   HALT(5);
  84. END oom;
  85. (* \\\ ------------------------------------------------------------------------- *)
  86.  
  87. (* /// ------------------------- "PROCEDURE AddPtr()" -------------------------- *)
  88. PROCEDURE AddPtr * (VAR ptr: e.APTR;
  89.                     add: LONGINT);
  90. BEGIN
  91.   ptr:=y.VAL(e.APTR,y.VAL(LONGINT,ptr)+add);
  92. END AddPtr;
  93. (* \\\ ------------------------------------------------------------------------- *)
  94.  
  95. (* /// ---------------------- "PROCEDURE CheckVersions()" ---------------------- *)
  96. PROCEDURE CheckVersions * (dummy: ARRAY OF CHAR); (* $CopyArrays- *)
  97.  
  98. VAR     garbage: e.LibraryPtr;
  99.  
  100. BEGIN
  101.   IF ~lv.CheckVersion(y.ADR(e.SysBase.libNode),39,0) THEN
  102.     d.PrintF("CyberQT needs at least AmigaOS 3.0 (V39)\n");
  103.     HALT(0);
  104.   END;
  105.   IF ~(e.m68020 IN e.SysBase.attnFlags) THEN
  106.     d.PrintF("CyberQT needs at least MC68020\n");
  107.     HALT(0);
  108.   END;
  109.   IF ~lv.CheckVersion(aio.base,39,0) THEN
  110.     d.PrintF("CyberQT needs asyncio.library V39+\n");
  111.     HALT(0);
  112.   END;
  113.   garbage:=e.OpenLibrary("garbagecollector.library",3);
  114.   IF ~lv.CheckVersion(garbage,3,80) THEN
  115.     d.PrintF("CyberQT needs garbagecollector.library V3+\n");
  116.     HALT(0);
  117.   END;
  118.   IF garbage#NIL THEN e.CloseLibrary(garbage); END;
  119. END CheckVersions;
  120. (* \\\ ------------------------------------------------------------------------- *)
  121.  
  122. (* /// ---------------------- "PROCEDURE DisposeTrack()" ----------------------- *)
  123. PROCEDURE DisposeTrack * (VAR trackList: e.List);
  124.  
  125. VAR     track: g.TrackPtr;
  126.  
  127. BEGIN
  128.   WHILE ~es.ListEmpty(trackList) DO
  129.     track:=e.RemHead(trackList);
  130.     DISPOSE(track.descriptions);
  131.     DISPOSE(track.times);
  132.     DISPOSE(track.syncs);
  133.     DISPOSE(track.samples);
  134.     DISPOSE(track.sizes);
  135.     DISPOSE(track.offsets);
  136.     DISPOSE(track.edits);
  137.     DISPOSE(track);
  138.   END;
  139.   es.NewList(trackList);
  140. END DisposeTrack;
  141. (* \\\ ------------------------------------------------------------------------- *)
  142.  
  143. (* /// --------------------- "PROCEDURE CalcDescEntries()" --------------------- *)
  144. PROCEDURE CalcDescEntries * (trackList: e.List): LONGINT;
  145.  
  146. VAR     cnt: LONGINT;
  147.         track: g.TrackPtr;
  148.  
  149. BEGIN
  150.   cnt:=0;
  151.   track:=trackList.head;
  152.   WHILE track.node.succ#NIL DO
  153.     INC(cnt,track.descriptionEntries);
  154.     track:=track.node.succ;
  155.   END;
  156.   RETURN cnt;
  157. END CalcDescEntries;
  158. (* \\\ ------------------------------------------------------------------------- *)
  159.  
  160. (* /// ----------------------- "PROCEDURE CalcMaxSize()" ----------------------- *)
  161. PROCEDURE CalcMaxSize * (trackList: e.List;
  162.                          video: BOOLEAN): LONGINT;
  163.  
  164. VAR     maxi: LONGINT;
  165.         cnt: LONGINT;
  166.         track: g.TrackPtr;
  167.  
  168. BEGIN
  169.   maxi:=MIN(LONGINT);
  170.   track:=trackList.head;
  171.   IF video THEN
  172.     WHILE track.node.succ#NIL DO
  173.       FOR cnt:=0 TO track.sizeEntries-1 DO maxi:=mu.max(maxi,track.sizes[cnt]); END;
  174.       track:=track.node.succ;
  175.     END;
  176.   ELSE
  177.     WHILE track.node.succ#NIL DO
  178.       FOR cnt:=0 TO track.sampleEntries-1 DO maxi:=mu.max(maxi,track.samples[cnt].samplesPerChunk); END;
  179.       track:=track.node.succ;
  180.     END;
  181.   END;
  182.   RETURN maxi;
  183. END CalcMaxSize;
  184. (* \\\ ------------------------------------------------------------------------- *)
  185.  
  186. (* /// --------------------- "PROCEDURE CountKeyframes()" ---------------------- *)
  187. PROCEDURE CountKeyframes * (trackList: e.List): LONGINT;
  188.  
  189. VAR     track: g.TrackPtr;
  190.         keys: LONGINT;
  191.  
  192. BEGIN
  193.   keys:=0;
  194.   track:=trackList.head;
  195.   WHILE track.node.succ#NIL DO
  196.     IF track.syncs#NIL THEN
  197.       INC(keys,track.syncEntries);
  198.     ELSE
  199.       INC(keys,mu.max(track.sizeEntries,track.timeEntries)); (* sonst Anzahl der Bilder nehmen, weil alle Bilder Keyframes sind *)
  200.     END;
  201.     track:=track.node.succ;
  202.   END;
  203.   RETURN keys;
  204. END CountKeyframes;
  205. (* \\\ ------------------------------------------------------------------------- *)
  206.  
  207. (* /// ----------------------- "PROCEDURE SortCodecs()" ------------------------ *)
  208. PROCEDURE SortCodecs * (VAR trackList: e.List);
  209.  
  210. VAR     tempList: e.List;
  211.         track: g.TrackPtr;
  212.         pred: g.TrackPtr;
  213.         foundPos: BOOLEAN;
  214.  
  215. BEGIN
  216.   es.NewList(tempList);
  217.   WHILE ~es.ListEmpty(trackList) DO e.AddTail(tempList,e.RemHead(trackList)); END;
  218.   es.NewList(trackList);
  219.   WHILE ~es.ListEmpty(tempList) DO
  220.     track:=e.RemHead(tempList);
  221.     IF es.ListEmpty(trackList) THEN
  222.       e.AddHead(trackList,track);
  223.     ELSIF track.initDuration<trackList.head(g.TrackPtr).initDuration THEN
  224.       e.AddHead(trackList,track);
  225.     ELSE
  226.       foundPos:=FALSE;
  227.       pred:=trackList.head;
  228.       WHILE ~foundPos & (pred.node.succ#NIL) DO
  229.         IF pred.initDuration>track.initDuration THEN
  230.           foundPos:=TRUE;
  231.           pred:=pred.node.pred;
  232.         ELSE
  233.           pred:=pred.node.succ;
  234.         END;
  235.       END;
  236.       e.Insert(trackList,track,pred);
  237.     END;
  238.   END;
  239. END SortCodecs;
  240. (* \\\ ------------------------------------------------------------------------- *)
  241.  
  242. PROCEDURE CalcScrID * (idStr: ARRAY OF CHAR): LONGINT;
  243.  
  244. VAR     x: INTEGER;
  245.         goon: BOOLEAN;
  246.         id: LONGINT;
  247.  
  248. BEGIN
  249.   id:=0;
  250.   IF (idStr[0]="$") OR ((idStr[0]="0") & (idStr[1]="x")) THEN
  251.     IF idStr[0]="$" THEN
  252.       x:=1;
  253.     ELSE
  254.       x:=2;
  255.     END;
  256.     goon:=TRUE;
  257.     WHILE (idStr[x]#00X) & goon DO
  258.       id:=id*16;
  259.       CASE idStr[x] OF
  260.       | "0".."9": INC(id,ORD(idStr[x])-ORD("0"));
  261.       | "a".."f": INC(id,ORD(idStr[x])-ORD("a")+10);
  262.       | "A".."F": INC(id,ORD(idStr[x])-ORD("A")+10);
  263.       ELSE
  264.         id:=0;
  265.         goon:=FALSE;
  266.       END;
  267.     END;
  268.   END;
  269.   RETURN id;
  270. END CalcScrID;
  271.  
  272. BEGIN
  273.   ol.OutOfMemHandler:=oom;
  274. END CyberQTUtils.
  275.